#ifndef GAME_SCENE_H
#define GAME_SCENE_H

#ifndef HEAD_Q_H
#include "../head_Q.h"
#endif

#ifndef SCENE_QT_H
#include "../utils/scene_qt.h"
#endif

#ifndef GAMELOGICH_H
#include "../GameLogic/GameLogic.h"
#endif

#ifndef PAINT_SYSTEM_H
#include "../PaintSystem/paint_system.h"
#endif

#ifndef MY_MOUSE_H
#include "../utils/My_Mouse.h"
#endif

#ifndef FACILITYICONBUTTON_H
#include "../Facility/FacilityIconButton/facilityiconbutton.h"
#endif

#ifndef DATA_MANAGER_H
#include "../utils/data_manager.h"
#endif

#ifndef HUB_H
#include "../Facility/Hub.h"
#endif

#include <QTimer>
#include <QGraphicsPixmapItem>
#include <QMediaPlayer>
#include <QAudioOutput>
// #include <QMediaPlaylist>
class Game_Scene:public Scene_qt
{
    Q_OBJECT
private:
    bool process = false;
    Hub *hub = null;
    GameLogic *game_logic = null;       //游戏逻辑
    PaintSystem *paint_system = null;   //绘画
    My_Mouse my_mouse;                      //鼠标
    QPointF mousePos;                       //鼠标坐标 之后合并到鼠标中
    QGraphicsPixmapItem* item = null;    // 鼠标携带的图片 之后合并到鼠标中
    QMediaPlayer *player = null;         // 音乐
    QAudioOutput *audioOutput = null;    // 音乐播放器
    QTimer timer_update_game;               // 更新游戏帧的定时器

    int pointNum = 0;
    QLabel pointNumLabel; // 升级点数

    int finishedTask = 0; // 完成的任务数

    int storeedNum = 0;
    int targetNums = 10; //任务目标 初始为10
    QLabel HubLabel; // 存储的物件数/Target

    Data_Manager *data_manager = null;

public:
    explicit Game_Scene(Data_Manager *data_manager = null, QWidget *parent = null);
    void enterScene();
    void leaveScene();
    ~Game_Scene();
    void do_save();     // 局内存档
    void load_save();   // 局内读入
protected:
    void paintEvent(QPaintEvent *)override;
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void keyPressEvent(QKeyEvent *event) override;
private:
    QList<FacilityIconButton *> iconBtns; // 下方选择按钮
    QList<QPushButton *> taskBtns; // 左边升级按钮
    void setupMap();            // 初始化地图
    void setupButton();         // 初始化下方选择按钮 左边的升级按钮
    void setupLabel();          // 初始化各个Label
    void setupMusic();          // 初始化音乐
    void setupPaintSystem();    // 初始化绘画系统
    void setupGameLogic();      // 初始化游戏逻辑
    void paintGrid();           // 绘制地图
    void placeFacility(Coordinate co);       // 放置一个 设施
    void removeFacility(Coordinate co);      // 删除一个 设施
    void chooseFacility(FacilityType f_type,int groupNum);      // 点击一个按钮后，选择了一个设备
    void chageFacilityIdx();           // 改变Idx+1
    void updateMouseItem();     // 更新跟随鼠标移动的图片
    inline void clearMouseItem(){ // 清空跟随鼠标移动的图片
        if(item){scene->removeItem(item); delete item; item = null;}
    }
public slots:
    void update_game(); // 按帧 更新游戏
    void handle_mouseMove(QMouseEvent *event); // 处理移动事件
    void handle_mouseWheel(QWheelEvent *event); // 处理滚轮事件
    void handle_keyPress(QKeyEvent *event); // 处理滚轮事件
};

#endif // GAME_SCENE_H
